﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Onshi.POS.AccesoDatos;
using Onshi.POS.AccesoDatos.Interfaces;
using Onshi.POS.Modelo.Entidades.Tipos;

namespace Onshi.POS.Repositorios
{
    public class RepositorioTipoArticulo : RepositorioTipo<TipoArticulo>
    {
        #region Constructores

        public RepositorioTipoArticulo()
            : base()
        {
            servicioDatosTipoArticulo = new ServicioDatosTipoArticulo();
        }

        #endregion

        #region Atributos

        private IServicioDatosTipoArticulo servicioDatosTipoArticulo;

        #endregion

        #region Propiedades

        private IServicioDatosTipoArticulo ServicioDatosTipoArticulo
        {
            get { return servicioDatosTipoArticulo; }
        }

        #endregion

        #region Metodos

        protected override TipoArticulo FilaAEntidad(DataRow fila)
        {
            TipoArticulo tipoArticulo = new TipoArticulo();
            tipoArticulo.Id = (Byte)fila["IdTipoArticulo"];
            tipoArticulo.Nombre = (String)fila["Nombre"];
            return tipoArticulo;
        }

        public TipoArticulo DevolverPorId(Byte id)
        {
            TipoArticulo entidad = (from TipoArticulo item in entidades where item.Id == id select item).FirstOrDefault();
            if (entidades != null)
            {
                using (DataSet ds = ServicioDatosTipoArticulo.TipoArticulo_DevolverPorId(id))
                {
                    if (ds.Tables[0].Rows.Count != 0)
                    {
                        entidad = FilaAEntidad(ds.Tables[0].Rows[0]);
                        entidades.Add(entidad);
                    }
                }
            }
            return entidad;
        }

        public void Insertar(TipoArticulo entidad)
        {
            entidad.Id = ServicioDatosTipoArticulo.TipoArticulo_Insertar(entidad.Nombre);
        }

        public void Modificar(TipoArticulo entidad)
        {
            servicioDatosTipoArticulo.TipoArticulo_Modificar(entidad.Id, entidad.Nombre);
        }

        public void Eliminar(TipoArticulo entidad)
        {
            ServicioDatosTipoArticulo.TipoArticulo_Eliminar(entidad.Id);
            entidad = null;
        }

        public override List<TipoArticulo> DevolverTodos()
        {
            if (entidades == null)
                entidades = TablaALista(ServicioDatosTipoArticulo.TipoArticulo_DevolverTodos().Tables[0]);
            return entidades.ToList();
        }

        #endregion

    }
}
